package com.lz.blog.utils;

import com.lz.blog.dao.pojo.SysUser;

/**
 * 本地存储用户信息
 * @author Liz
 * @date 2023/02/14 16:43
 **/
public class UserThreadLocal {

    private UserThreadLocal() {
    }

    //线程变量隔离 实际上是每一个线程独立的一个变量存储器，生命周期与线程相同，线程间不回获取到
    public static final ThreadLocal<SysUser> LOCAL = new ThreadLocal<>();

    public static void put(SysUser sysUser) {
        LOCAL.set(sysUser);
    }
    public static SysUser get() {
        return LOCAL.get();
    }
    // todo
    public static void remove(){
        /**
         *
         * 一定要在线程关闭之前调用进行清除
         * 原因：ThreadLocal存储各个线程的值是通过map进行存储
         * key存放的是当前线程 currentThread；value存储的是对应的值
         * 若线程生命周期结束，则永远获取不到该线程，会造成内存泄漏问题
         */
        LOCAL.remove();
    }
}
